﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common.Security;

namespace SEG
{
    public class Authorization : IAuthorization
    {
        public static Boolean CanExecute(string formulario, params Guid[] acciones)
        {
            var rta = false;

            foreach (var accion in acciones)
            {
                var rtaTemp = Session.Usuario.Grupo.
                    Where(g => g.EstaActivo).
                        Any(g =>
                            g.Permiso.
                                Where(p => p.Formulario.Nombre == formulario).
                                Any(p => p.Accion.Any(acc => acc.ID_Accion == accion || acc.ID_Accion == Acciones.Full))
                            );
                if (rtaTemp == true)
                {
                    rta = true;
                    break;
                }
            }

            return rta;
        }

        public static Boolean CanExecuteManager(string formulario)
        {
            Guid[] acciones = { Acciones.Escritura, Acciones.Exportacion, Acciones.Full, Acciones.Impresion, Acciones.Lectura };
            return Authorization.CanExecute(formulario, acciones);
        }

        public Boolean CanExecute(string formulario)
        {
            return Authorization.CanExecuteManager(formulario);
        }
        public Boolean CanExecuteAdd(string formulario)
        {
            return Authorization.CanExecute(formulario, Acciones.Escritura);
        }
        public Boolean CanExecuteModify(string formulario)
        {
            return Authorization.CanExecute(formulario, Acciones.Escritura);
        }
        public Boolean CanExecuteDelete(string formulario)
        {
            return Authorization.CanExecute(formulario, Acciones.Escritura);
        }
        public Boolean CanExecuteView(string formulario)
        {
            return Authorization.CanExecute(formulario, Acciones.Lectura);
        }
  
        public Boolean CanExecuteExport(string formulario)
        {
            return Authorization.CanExecute(formulario, Acciones.Exportacion);
        }
        public Boolean CanExecutePrint(string formulario)
        {
            return Authorization.CanExecute(formulario, Acciones.Impresion);
        }
    }
}
